﻿using System;
using System.Collections.Generic;
using AccesoData;
using Entidades;
using Logica.Comandos.Sucursal;
using Logica.Interfaces;

namespace Logica.Comandos.AseguradoraCommand
{
    /// <summary>
    /// Clase que se encarga de la validacion y el almacenamiento de los datos de
    /// de una aseguradora 
    /// </summary>
    public class ComandoCrearAseguradora: Comando, IAgregable
    {
        #region Atributos

        private List<Comando> _comandos;
        private Aseguradora _aseguradora;
        #endregion

        #region Constructor

        public ComandoCrearAseguradora()
        {
            _comandos = new List<Comando>();
            _comandos.Add(FComandos.ComandoSucursal().Agregar());
            _aseguradora = FabricaEntidades.ObtenerAseguradora();

        }

        #endregion

        #region Metodos Sin Implementar
        public override void Ejecutar()
        {
            throw new NotImplementedException();
        }

        public int Ejecutar(Entidades.Cliente cliente)
        {
            throw new NotImplementedException();
        }

        public int Ejecutar(Inspeccion inspeccion, Entidades.Aseguradora aseguradora)
        {
            throw new NotImplementedException();
        }

        public int Ejecutar(Entidades.Lugar lugar)
        {
            throw new NotImplementedException();
        }

        public int Ejecutar(Personal personal)
        {
            throw new NotImplementedException();
        }

        public int Ejecutar(Entidades.Poliza poliza)
        {
            throw new NotImplementedException();
        }

        public int Ejecutar(Recaudo recaudo)
        {
            throw new NotImplementedException();
        }

        public int Ejecutar(RecaudoInspeccion recaudoInspeccion)
        {
            throw new NotImplementedException();
        }

        public int Ejecutar(Entidades.Ramo ramo)
        {
            throw new NotImplementedException();
        }


        public int Ejecutar(Entidad recaudo, Entidad ramo)
        {
            throw new NotImplementedException();
        }

        public int Ejecutar(DetalleEstimado detalle)
        {
            throw new NotImplementedException();
        }

        public int Ejecutar(Entidades.Siniestro siniestro)
        {
            throw new NotImplementedException();
        }

        public int Ejecutar(Entidades.Sucursal sucursal)
        {
            throw new NotImplementedException();
        }

        #endregion

        #region Metodos de Apoyo
        
        /// <summary>
        /// metodo que valida que no se agrege una aseguradora con el mismo nombre ni
        /// el mismo rif 
        /// </summary>
        /// <param name="aseguradoras"></param>
        /// <returns></returns>
        private bool VerificarAseguradora( List<Entidades.Aseguradora> aseguradoras )
        {
            foreach (var miAseguradora in aseguradoras )
            {
                if ((miAseguradora.Rif == _aseguradora.Rif)&&
                    (miAseguradora.LetraRif == _aseguradora.Rif)&&
                    (miAseguradora.Nombre == _aseguradora.Nombre))
                {
                    return false;
                }
            }
            return true;
        }

        #endregion

        #region Metodos Implementados
        
        public int Ejecutar(Aseguradora aseguradora)
        {
            try
            {
                int idAseguradora = 
                    DAO.ObtenerFabrica(1).ObtenerDaoAseguradora().AgregarAseguradora(aseguradora);
                foreach (var sucursal in aseguradora.Sucursales)
                {
                    sucursal.IdAseguradora = idAseguradora;
                    ((ComandoCrearSucursal) _comandos[0]).Ejecutar(sucursal);
                }
                return idAseguradora;
            }
            catch (Exception)
            {

                return -1; 
            }
        }

        #endregion

    }
}
